package com.draven.product.service.impl;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.draven.model.product.ProductDTO;
import com.draven.product.entity.Product;
import com.draven.product.mapper.ProductMapper;
import com.draven.product.service.ProductService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ProductServiceImpl implements ProductService {

    @Autowired
    private ProductMapper productMapper;

    @Override
    public String getProduct(Long id) {
        ProductDTO productDTO = new ProductDTO();
        productDTO.setId(id);
        productDTO.setName("mac");
        productDTO.setDescription("苹果电脑");
        productDTO.setPrice(100.00);
        productDTO.setStock(100);
        productDTO.setCategory("电脑");
        productDTO.setAvailable(true);
        productDTO.setImageUrl("www.baidu.com");
        return JSON.toJSONString(productDTO);
    }

    @Override
    public void updateStock(Long id, Integer num) {
        Integer currentStock = productMapper.selectStockById(id);
        if (currentStock != null && currentStock >= num) {
            // 创建UpdateWrapper实例
            UpdateWrapper<Product> wrapper = new UpdateWrapper<>();
            // 设置更新条件：根据产品ID进行更新
            wrapper.eq("id", id);
            // 设置更新内容：库存数量减去指定的数量
            wrapper.setSql("stock = stock - " + num);
            // 执行更新操作
            productMapper.update(null, wrapper);
        } else {
            // 库存不足，抛出异常或返回错误信息
            throw new RuntimeException("库存不足，无法完成更新操作");
        }
    }

    @Override
    public List<ProductDTO> productPage() {
        List<Product> products = productMapper.productPage();
        if (!products.isEmpty()) {
            return products.stream().map(product -> {
                ProductDTO productDTO = new ProductDTO();
                BeanUtils.copyProperties(product, productDTO);
                return productDTO;
            }).toList();
        }
        return null;
    }

    @Override
    public ProductDTO getProductDetail(Long id) {
        Product product = productMapper.selectById(id);
        if (product != null) {
            ProductDTO productDTO = new ProductDTO();
            BeanUtils.copyProperties(product, productDTO);
            return productDTO;
        }
        return null;
    }
}
